﻿namespace Molten.Input;

/// <summary>
/// Represents a key on a keyboard.
/// </summary>
public enum KeyCode
{
    /// <summary>
    /// The "Cancel" key.
    /// </summary>
    Cancel = 0x03,

    /// <summary>
    /// The "Backspace" key.
    /// </summary>
    Backspace = 0x08,

    /// <summary>
    /// The "Clear" key.
    /// </summary>
    Clear = 0x0C,

    /// <summary>
    /// The "Return" key.
    /// </summary>
    Return = 0x0D,

    /// <summary>
    /// The "Shift" key.
    /// </summary>
    Shift = 0x10,

    /// <summary>
    /// The "Control" key.
    /// </summary>
    Control = 0x11,

    /// <summary>
    /// The "Menu" key.
    /// </summary>
    Menu = 0x12,

    /// <summary>
    /// The "Pause" key.
    /// </summary>
    Pause = 0x13,

    /// <summary>
    /// The "Capital" key.
    /// </summary>
    Capital = 0x14,

    /// <summary>
    /// The "Kana" key.
    /// </summary>
    Kana = 0x15,

    /// <summary>
    /// The "Hangeul" key.
    /// </summary>
    Hangeul = 0x15,

    /// <summary>
    /// The "Hangul" key.
    /// </summary>
    Hangul = 0x15,

    /// <summary>
    /// The "Junja" key.
    /// </summary>
    Junja = 0x17,

    /// <summary>
    /// The "Final" key.
    /// </summary>
    Final = 0x18,

    /// <summary>
    /// The "Hanja" key.
    /// </summary>
    Hanja = 0x19,

    /// <summary>
    /// The "Kanji" key.
    /// </summary>
    Kanji = 0x19,

    /// <summary>
    /// The "Escape" key.
    /// </summary>
    Escape = 0x1B,

    /// <summary>
    /// The "Convert" key.
    /// </summary>
    Convert = 0x1C,

    /// <summary>
    /// The "NonConvert" key.
    /// </summary>
    NonConvert = 0x1D,

    /// <summary>
    /// The "Accept" key.
    /// </summary>
    Accept = 0x1E,

    /// <summary>
    /// The "ModeChange" key.
    /// </summary>
    ModeChange = 0x1F,

    /// <summary>
    /// The "Space" key.
    /// </summary>
    Space = 0x20,

    /// <summary>
    /// The "Prior" key.
    /// </summary>
    Prior = 0x21,

    /// <summary>
    /// The "Next" key.
    /// </summary>
    Next = 0x22,

    /// <summary>
    /// The "End" key.
    /// </summary>
    End = 0x23,

    /// <summary>
    /// The "Home" key.
    /// </summary>
    Home = 0x24,

    /// <summary>
    /// Represents the left arrow key.
    /// </summary>
    Left = 0x25,

    /// <summary>
    /// Represents the up arrow key.
    /// </summary>
    Up = 0x26,

    /// <summary>
    /// Represents the right arrow key.
    /// </summary>
    Right = 0x27,

    /// <summary>
    /// Represents the down arrow key.
    /// </summary>
    Down = 0x28,

    /// <summary>
    /// Represents the select key.
    /// </summary>
    Select = 0x29,

    /// <summary>
    /// Represents the print key.
    /// </summary>
    Print = 0x2A,

    /// <summary>
    /// Represents the execute key.
    /// </summary>
    Execute = 0x2B,

    /// <summary>
    /// Represents the snapshot key.
    /// </summary>
    Snapshot = 0x2C,

    /// <summary>
    /// Represents the insert key.
    /// </summary>
    Insert = 0x2D,

    /// <summary>
    /// Represents the delete key.
    /// </summary>
    Delete = 0x2E,

    /// <summary>
    /// Represents the help key.
    /// </summary>
    Help = 0x2F,

    /// <summary>
    /// Represents the 0 key.
    /// </summary>
    Num0 = 0x30,

    /// <summary>
    /// Represents the 1 key.
    /// </summary>
    Num1 = 0x31,

    /// <summary>
    /// Represents the 2 key.
    /// </summary>
    Num2 = 0x32,

    /// <summary>
    /// Represents the 3 key.
    /// </summary>
    Num3 = 0x33,

    /// <summary>
    /// Represents the 4 key.
    /// </summary>
    Num4 = 0x34,

    /// <summary>
    /// Represents the 5 key.
    /// </summary>
    Num5 = 0x35,

    /// <summary>
    /// Represents the 6 key.
    /// </summary>
    Num6 = 0x36,

    /// <summary>
    /// Represents the 7 key.
    /// </summary>
    Num7 = 0x37,

    /// <summary>
    /// Represents the 8 key.
    /// </summary>
    Num8 = 0x38,

    /// <summary>
    /// Represents the 9 key.
    /// </summary>
    Num9 = 0x39,

    /// <summary>
    /// Represents the A key.
    /// </summary>
    A = 0x41,

    /// <summary>
    /// Represents the B key.
    /// </summary>
    B = 0x42,

    /// <summary>
    /// Represents the C key.
    /// </summary>
    C = 0x43,

    /// <summary>
    /// Represents the D key.
    /// </summary>
    D = 0x44,

    /// <summary>
    /// Represents the E key.
    /// </summary>
    E = 0x45,

    /// <summary>
    /// Represents the F key.
    /// </summary>
    F = 0x46,

    /// <summary>
    /// Represents the G key.
    /// </summary>
    G = 0x47,

    /// <summary>
    /// Represents the H key.
    /// </summary>
    H = 0x48,

    /// <summary>
    /// Represents the I key.
    /// </summary>
    I = 0x49,

    /// <summary>
    /// Represents the J key.
    /// </summary>
    J = 0x4A,

    /// <summary>
    /// Represents the K key.
    /// </summary>
    K = 0x4B,

    /// <summary>
    /// Represents the L key.
    /// </summary>
    L = 0x4C,

    /// <summary>
    /// Represents the M key.
    /// </summary>
    M = 0x4D,

    /// <summary>
    /// Represents the letter 'N' key.
    /// </summary>
    N = 0x4E,

    /// <summary>
    /// Represents the letter 'O' key.
    /// </summary>
    O = 0x4F,

    /// <summary>
    /// Represents the letter 'P' key.
    /// </summary>
    P = 0x50,

    /// <summary>
    /// Represents the letter 'Q' key.
    /// </summary>
    Q = 0x51,

    /// <summary>
    /// Represents the letter 'R' key.
    /// </summary>
    R = 0x52,

    /// <summary>
    /// Represents the letter 'S' key.
    /// </summary>
    S = 0x53,

    /// <summary>
    /// Represents the letter 'T' key.
    /// </summary>
    T = 0x54,

    /// <summary>
    /// Represents the letter 'U' key.
    /// </summary>
    U = 0x55,

    /// <summary>
    /// Represents the letter 'V' key.
    /// </summary>
    V = 0x56,

    /// <summary>
    /// Represents the letter 'W' key.
    /// </summary>
    W = 0x57,

    /// <summary>
    /// Represents the letter 'X' key.
    /// </summary>
    X = 0x58,

    /// <summary>
    /// Represents the letter 'Y' key.
    /// </summary>
    Y = 0x59,

    /// <summary>
    /// Represents the letter 'Z' key.
    /// </summary>
    Z = 0x5A,

    /// <summary>
    /// Represents the left Windows logo key.
    /// </summary>
    LWindows = 0x5B,

    /// <summary>
    /// Represents the right Windows logo key.
    /// </summary>
    RWindows = 0x5C,

    /// <summary>
    /// Represents the Application key (the key that is used to simulate a right-click of the mouse).
    /// </summary>
    Apps = 0x5D,

    /// <summary>
    /// The "Power" key.
    /// </summary>
    Power = 0x5E,

    /// <summary>
    /// The "Sleep" key.
    /// </summary>
    Sleep = 0x5F,

    /// <summary>
    /// Represents the "0" key on the numeric keypad.
    /// </summary>
    Numpad0 = 0x60,

    /// <summary>
    /// Represents the "1" key on the numeric keypad.
    /// </summary>
    Numpad1 = 0x61,

    /// <summary>
    /// Represents the "2" key on the numeric keypad.
    /// </summary>
    Numpad2 = 0x62,

    /// <summary>
    /// Represents the "3" key on the numeric keypad.
    /// </summary>
    Numpad3 = 0x63,

    /// <summary>
    /// Represents the "4" key on the numeric keypad.
    /// </summary>
    Numpad4 = 0x64,

    /// <summary>
    /// Represents the "5" key on the numeric keypad.
    /// </summary>
    Numpad5 = 0x65,

    /// <summary>
    /// Represents the "6" key on the numeric keypad.
    /// </summary>
    Numpad6 = 0x66,

    /// <summary>
    /// Represents the "7" key on the numeric keypad.
    /// </summary>
    Numpad7 = 0x67,

    /// <summary>
    /// Represents the "8" key on the numeric keypad.
    /// </summary>
    Numpad8 = 0x68,

    /// <summary>
    /// Represents the "9" key on the numeric keypad.
    /// </summary>
    Numpad9 = 0x69,

    /// <summary>
    /// The "Multiply" key.
    /// </summary>
    Multiply = 0x6A,

    /// <summary>
    /// The "Add" key.
    /// </summary>
    Add = 0x6B,

    /// <summary>
    /// The "Separator" key.
    /// </summary>
    Separator = 0x6C,

    /// <summary>
    /// The "Subtract" key.
    /// </summary>
    Subtract = 0x6D,

    /// <summary>
    /// The "Decimal" key.
    /// </summary>
    Decimal = 0x6E,

    /// <summary>
    /// The "Divide" key.
    /// </summary>
    Divide = 0x6F,

    /// <summary>
    /// The "F1" key.
    /// </summary>
    F1 = 0x70,

    /// <summary>
    /// The "F2" key.
    /// </summary>
    F2 = 0x71,

    /// <summary>
    /// The "F3" key.
    /// </summary>
    F3 = 0x72,

    /// <summary>
    /// The "F4" key.
    /// </summary>
    F4 = 0x73,

    /// <summary>
    /// The "F5" key.
    /// </summary>
    F5 = 0x74,

    /// <summary>
    /// The "F6" key.
    /// </summary>
    F6 = 0x75,

    /// <summary>
    /// The "F7" key.
    /// </summary>
    F7 = 0x76,

    /// <summary>
    /// The "F8" key.
    /// </summary>
    F8 = 0x77,

    /// <summary>
    /// The "F9" key.
    /// </summary>
    F9 = 0x78,

    /// <summary>
    /// The "F10" key.
    /// </summary>
    F10 = 0x79,

    /// <summary>
    /// The "F11" key.
    /// </summary>
    F11 = 0x7A,

    /// <summary>
    /// The "F12" key.
    /// </summary>
    F12 = 0x7B,

    /// <summary>
    /// The "F13" key.
    /// </summary>
    F13 = 0x7C,

    /// <summary>
    /// The "F14" key.
    /// </summary>
    F14 = 0x7D,

    /// <summary>
    /// The "F15" key.
    /// </summary>
    F15 = 0x7E,

    /// <summary>
    /// The "F16" key.
    /// </summary>
    F16 = 0x7F,

    /// <summary>
    /// The "F17" key.
    /// </summary>
    F17 = 0x80,

    /// <summary>
    /// The "F18" key.
    /// </summary>
    F18 = 0x81,

    /// <summary>
    /// The "F19" key.
    /// </summary>
    F19 = 0x82,

    /// <summary>
    /// Represents the F20 key.
    /// </summary>
    F20 = 0x83,

    /// <summary>
    /// Represents the F21 key.
    /// </summary>
    F21 = 0x84,

    /// <summary>
    /// Represents the F22 key.
    /// </summary>
    F22 = 0x85,

    /// <summary>
    /// Represents the F23 key.
    /// </summary>
    F23 = 0x86,

    /// <summary>
    /// Represents the F24 key.
    /// </summary>
    F24 = 0x87,

    /// <summary>
    /// Represents the Numlock key.
    /// </summary>
    Numlock = 0x90,

    /// <summary>
    /// Represents the Scroll key.
    /// </summary>
    Scroll = 0x91,

    /// <summary>
    /// Represents the left shift key.
    /// </summary>
    LShift = 0xA0,

    /// <summary>
    /// Represents the right shift key.
    /// </summary>
    RShift = 0xA1,

    /// <summary>
    /// Represents the left control key.
    /// </summary>
    LControl = 0xA2,

    /// <summary>
    /// Represents the right control key.
    /// </summary>
    RControl = 0xA3,

    /// <summary>
    /// Represents the left menu key.
    /// </summary>
    LMenu = 0xA4,

    /// <summary>
    /// Represents the right menu key.
    /// </summary>
    RMenu = 0xA5,

    /// <summary>
    /// Represents the browser back key.
    /// </summary>
    BrowserBack = 0xA6,

    /// <summary>
    /// Represents the browser forward key.
    /// </summary>
    BrowserForward = 0xA7,

    /// <summary>
    /// Represents the browser refresh key.
    /// </summary>
    BrowserRefresh = 0xA8,

    /// <summary>
    /// Represents the browser stop key.
    /// </summary>
    BrowserStop = 0xA9,

    /// <summary>
    /// Represents the browser search key.
    /// </summary>
    BrowserSearch = 0xAA,

    /// <summary>
    /// Represents the browser favorites key.
    /// </summary>
    BrowserFavorites = 0xAB,

    /// <summary>
    /// Represents the browser home key.
    /// </summary>
    BrowserHome = 0xAC,

    /// <summary>
    /// Represents the volume mute key.
    /// </summary>
    VolumeMute = 0xAD,

    /// <summary>
    /// Represents the volume down key.
    /// </summary>
    VolumeDown = 0xAE,

    /// <summary>
    /// Represents the volume up key.
    /// </summary>
    VolumeUp = 0xAF,

    /// <summary>
    /// Represents the media next track key.
    /// </summary>
    MediaNextTrack = 0xB0,

    /// <summary>
    /// Represents the media previous track key.
    /// </summary>
    MediaPreviousTrack = 0xB1,

    /// <summary>
    /// Represents the media stop key.
    /// </summary>
    MediaStop = 0xB2,

    /// <summary>
    /// Represents the media play/pause key.
    /// </summary>
    MediaPlayPause = 0xB3,

    /// <summary>
    /// Represents the launch mail key.
    /// </summary>
    LaunchMail = 0xB4,

    /// <summary>
    /// Select media.
    /// </summary>
    LaunchMediaSelect = 0xB5,

    /// <summary>
    /// Launch application #1.
    /// </summary>
    LaunchApp1 = 0xB6,

    /// <summary>
    /// Launch application #2.
    /// </summary>
    LaunchApp2 = 0xB7,

    /// <summary>
    /// The ";" key.
    /// </summary>
    Oem1 = 0xBA,

    /// <summary>
    /// The semicolon key.
    /// </summary>
    OemSemiColon = 0xBA,

    /// <summary>
    /// The "+" key.
    /// </summary>
    OemPlus = 0xBB,

    /// <summary>
    /// The "," key.
    /// </summary>
    OemComma = 0xBC,

    /// <summary>
    /// The "-" key.
    /// </summary>
    OemMinus = 0xBD,

    /// <summary>
    /// The "." key.
    /// </summary>
    OemPeriod = 0xBE,

    /// <summary>
    /// The "/" key.
    /// </summary>
    Oem2 = 0xBF,

    /// <summary>
    /// The "`" key.
    /// </summary>
    Oem3 = 0xC0,

    /// <summary>
    /// The "[" key.
    /// </summary>
    Oem4 = 0xDB,

    /// <summary>
    /// The "|" key.
    /// </summary>
    Oem5 = 0xDC,

    /// <summary>
    /// The "]" key.
    /// </summary>
    Oem6 = 0xDD,

    /// <summary>
    /// The "'" key.
    /// </summary>
    Oem7 = 0xDE,

    /// <summary>
    /// The "§" key.
    /// </summary>
    Oem8 = 0xDF,

    /// <summary>
    /// The "<" key.
    /// </summary>
    Oem102 = 0xE2,

    /// <summary>
    /// The process key.
    /// </summary>
    ProcessKey = 0xE5,

    /// <summary>
    /// The packet key.
    /// </summary>
    Packet = 0xE7,

    /// <summary>
    /// The "Attn" key.
    /// </summary>
    Attn = 0xF6,

    /// <summary>
    /// The "CrSel" key.
    /// </summary>
    Crsel = 0xF7,

    /// <summary>
    /// The "ExSel" key.
    /// </summary>
    Exsel = 0xF8,

    /// <summary>
    /// The "Erase EOF" key.
    /// </summary>
    Ereof = 0xF9,

    /// <summary>
    /// The "Play" key.
    /// </summary>
    Play = 0xFA,

    /// <summary>
    /// The "Zoom" key.
    /// </summary>
    Zoom = 0xFB,

    /// <summary>
    /// Reserved.
    /// </summary>
    NoName = 0xFC,

    /// <summary>
    /// The "PA1" key.
    /// </summary>
    Pa1 = 0xFD,

    /// <summary>
    /// The "CLEAR" key.
    /// </summary>
    OemClear = 0xFE,
}
